﻿using System;
using System.Collections.Generic;
using D3Sparrow.Core.Common;

namespace D3Sparrow.Core.Structures
{
}
  

/*

//sizeof = 0x1D0
unsafe public struct TContainer<T>
{
    public char  Name[256];            // 0x000
    public uint Limit;                // 0x100
    public uint SizeOf;               // 0x104
    public uint Count;                // 0x108
    public byte unknown_10C[60];      // 0x10C
    T**   List;                       // 0x148
    public byte unknown_14C[64];      // 0x14C
    public uint Bits;                 // 0x18C
    public byte unknown_190[64];      // 0x190
};

//sizeof = 0x94
struct CameraSub
{
    public fixed uint pad_04C[3];           // 0x000
    public fixed float unk_008[2];           // 0x008
    public float zoom;                 // 0x014
    public float unk_018;              // 0x018
    public  uint actor_id;             // 0x01C
    public fixed uint unk_020[2];           // 0x020
    public fixed float unk_028[24];          // 0x028
    public Vec3  position;             // 0x088
};

//sizeof = 0x198
struct CameraRaw
{
    public fixed uint pad_000[18];          // 0x000
    CameraSub* ptr;             // 0x048
    public fixed float pad_04C[42];          // 0x04C
    public uint cam_mode;             // 0x0F4    0 - free, 2 - snapped, 3 - AV
};

//sizeof = 0x74
struct CameraRaw2
{
    public uint unk_000;              // 0x000
    public float rot1;                 // 0x004
    public float rot2;                 // 0x008
    public float rot3;                 // 0x01C
    public float rot4;                 // 0x010
    public Vec3  position;             // 0x014
    public fixed float pad_020[3];           // 0x020
    public float fovY;                 // 0x02C
    public float fovX;                 // 0x030
    public fixed float unk_034[16];          // 0x034    some valid data
};

//sizeof = 0x210
struct tObManStorage
{
    public uint unknown_0[11];                    // 0x000 
    public float fl_120;                           // 0x02C 
    public float fl_1;                             // 0x030 
    public uint unknown_34[31];                   // 0x034 
    public uint tick_count;                       // 0x0B0
    public uint unknown_B4[4];                    // 0x0B4
    CObDataContainer* Data;                 // 0x0C4 
    public uint unknown_0C8[7];                   // 0x0C8 
    CAttribGroupsContainer* AttribGroups;   // 0x0E4 
    public uint unknown_0E8[2];                   // 0x0E8 
    tContainer<CACD>** ACD;                 // 0x0F0 
    public uint unknown_0F4[16];                  // 0x0F4 
    public uint Mode;                             // 0x134 
    public uint unknown_138[3];                   // 0x138
    void* Lights;                           // 0x144
    void* Cutscenes;                        // 0x148
    public byte unknown_14C[4];                   // 0x14C
    TContainer<CRActor>* Actors;            // 0x15C
    public byte unknown_160[4];                   // 0x160
    public uint ppCloth;                          // 0x170
    public uint ppExplosion;                      // 0x174
    public uint unknown_178[5];                   // 0x178
    CameraRaw* CameraPtr;                   // 0x18C
    public uint unknown_190[3];                   // 0x190
    ObManFrames* Frames;                    // 0x19C
    public uint unknown_1A0[3];                   // 0x1A0
    TContainer<SceneRaw>* Scenes;           // 0x1AC
    public uint unknown_17C[2];                   // 0x1B0
    CObMovHPtr* MovHistory;                 // 0x1B8
    public uint unknown_1BC;                      // 0x1BC
    public uint ui_mgr;                           // 0x1DC
    CameraRaw2 *CameraPtr2;                 // 0x1E0
    TContainer<CWorld>* Worlds;             // 0x1E4
    public uint unknown_1E8;                      // 0x1E8
    CObLocal* Local;                        // 0x1EC
    public uint unknown_1F0[8];                   // 0x1F0
};

//sizeof = 0x9C0
unsafe public struct ObMan  
{ 
 
    struct tPad 
    { 
        public fixed uint unknown_0[14];        // 0x000 
        public uint FrameCurrent;         // 0x038 
        public fixed uint unknown_3C[477];      // 0x03C 
    }; 

    tPad Data;                      // 0x000 
    tObManStorage Storage;          // 0x7B0
}; 

//sizeof = 0x4
unsafe public struct ObManPtr  
{ 
 
    ObMan* Ptr;             // 0x000 
}; 

//sizeof = 0xC
struct ObSkill
{
    PowerIds id;            // 0x000
    public uint rune;             // 0x004
    public uint unk;              // 0x008
};

//sizeof = 0x7FA0
struct tObData  
{ 
    public uint unknown_0;        // 0x000 
    public uint id_acd;           // 0x004 
    public uint id_actor;         // 0x008 
    public uint unknown_00C[42];  // 0x00C 
    ObSkill skills[6];      // 0x0B4
    public uint unknown_0FC[579]; // 0x0FC
    PowerIds passives[3];   // 0xA08
    public uint unknown_A14[6797];// 0xA14
    public uint seed[2];          // 0x7448
    public char  charName[64];     // 0x7450
    public char  unk7490[64];      // 0x7490
    public uint unk74D0[266];     // 0x74D0
    int   area;             // 0x78F8
    int   player_class;     // 0x78FC
    public uint unk7900[424];     // 0x7900
}; 

//sizeof = 0x7FF8
unsafe public struct CObDataContainer  
{ 
 
    public uint unknown_0[22];    // 0x000 
    tObData Data;           // 0x058 
}; 

//sizeof = 0x60
unsafe public struct CObLocal  
{ 
 
    public uint Index;            // 0x000 
    public byte unknown_4[92];    // 0x004 
}; 

unsafe public struct CObMovHPtr  
{ 
 
    public byte unknown_0[8];     // 0x000 
    CObMovH* Ptr;           // 0x008 
    public byte unknown_C[12];    // 0x00C 
}; 

unsafe public struct CObMovH  
{ 
 
    CObMov* Ptr;            // 0x000 
    public byte unknown_4[60];    // 0x004 
}; 

unsafe public struct CObMov  
{ 
 
    public byte unknown_0[20];    // 0x000 
    CObMov* Right;          // 0x014 
    CObMov* Left;           // 0x018 
    CObMov* Parent;         // 0x01C 
    public byte unknown_20[32];   // 0x020 
}; 

unsafe public struct ObManFrames  
{ 
 
    public uint Max;              // 0x000 
    public byte unknown_4[12];    // 0x004 
    public uint N13DC069C;        // 0x010 
    public byte unknown_14[108];  // 0x014 
}; 

unsafe public struct CAttribLinks  
{ 
 
    public byte unknown_0[132];     // 0x000 
}; 

template <unsafe public struct T, UINT32 I>
struct tMap
{ 
    T* Ptr;         // 0x000 Data ptr 
    public uint Unk;      // 0x004
    public uint Count;    // 0x008 
    T Data[I];      // 0x00C
    public uint Mask;     //
}; 

unsafe public struct CAttribGroup  
{ 
 
    public uint id_attrib;                // 0x000 
    public byte unknown_4[12];            // 0x004 
    CAttribFormula* Formula;        // 0x010 
    public byte unknown_14[36];           // 0x014 
    tMap<tAttribLink *, 33> Links;  // 0x038 
    public byte unknown_CC[144];          // 0x0CC 
}; 

unsafe public struct CAttribGroupsContainer  
{ 
 
    struct tWtf 
    { 
        public byte unknown_0[24];                        // 0x000 
        public uint _600DF00D;                            // 0x018 
    }; 

    tWtf a;                                         // 0x000 
    tWtf b;                                         // 0x01C 
    tWtf c;                                         // 0x038 
    tWtf d;                                         // 0x054 
    tContainer<CAttribGroup>* FastAttribGroups;     // 0x070 
    public byte unknown_74[32];                           // 0x074 
}; 

unsafe public struct CAttribFormula  
{ 
 
    public byte unknown_0[8];             // 0x000 
    tMap<tAttribLink *, 257> Map;   // 0x008 
    public byte unknown_41C[56];          // 0x41C 
};

//sizeof = 0x28
struct AttributeDesc 
{ 
    public uint unk0;         // 0x000
    public uint DefaultVal;   // 0x004 for when trying to get an attribute that doesn't exist in a FastAttributeGroup 
    public uint unk2;         // 0x008
    public uint Type;         // 0x010 0 = float, 1 = int 
    void* Formula1;     // 0x014
    void* Formula2;     // 0x018
    char* Name;         // 0x01C
    public uint unk3;         // 0x020
    void* unk5;         // 0x024
    public uint id;           // 0x028
}; 

unsafe public struct CObAttribCoder  
{ 
 
    public byte unknown_0[4];     // 0x000 
    LONG i;                 // 0x004 
    CObAttribCoder* Next;   // 0x008 
    public uint Bits;             // 0x00C 
}; 

struct tAttribLink  
{ 
    tAttribLink* Next;      // 0x000 
    LONG AttribIndex;       // 0x004 
    BYTE Value[4];          // 0x008 
};

//sizeof = 0x28
struct usePowerData
{
    PowerIds power_1;       // 0x000
    PowerIds power_2;       // 0x004
    public uint cmd;              // 0x008
    public uint acd_id;           // 0x00C
    public Vec3 pos;               // 0x010
    public uint world_id;         // 0x01C
    public uint end;              // 0x020
    public uint zero;             // 0x024
};

// sizeof = 0x10 
unsafe public struct CSNODef
{

    public uint unk[3];           // 0x000
    public uint pSNOAddr;         // 0x00C
};

// sizeof >= 0x14
unsafe public struct CSNOGroup
{

    public uint unk0[4];                  // 0x000
    TContainer<CSNODef>* pDef;      // 0x010
};
}
*/